﻿using System.ComponentModel;
using System.Windows;
using DryIoc;
using WpfDryIocDemo.Repositories;
using WpfDryIocDemo.Services;
using WpfDryIocDemo.ViewModels;

namespace WpfDryIocDemo
{
    public partial class App : Application
    {
        // DryIOC 容器实例（全局唯一）
        private DryIoc.IContainer _container;

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            // 1. 创建 DryIOC 容器
            _container = new DryIoc.Container();

            _container.Register<IUserRepository, UserRepository>(Reuse.Transient);
            _container.Register<UserService>(Reuse.Transient);
            _container.Register<MainViewModel>(Reuse.Transient);
            _container.Register<MainWindow>(Reuse.Transient);

            // 3. 解析主窗口实例（依赖链自动完成注入）
            var mainWindow = _container.Resolve<MainWindow>();
            mainWindow.Show(); // 启动应用
        }

        // 应用关闭时释放容器（可选，DryIOC 会自动管理非托管资源）
        protected override void OnExit(ExitEventArgs e)
        {
            _container.Dispose();
            base.OnExit(e);
        }
    }
}
